package IOStream.CharStream;

import java.io.FileReader;
import java.io.IOException;

/**
 * ClassName:CharStream004
 * Package:IOStream.CharStream
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/3/1-22:00
 * @Version:v1.0
 */
public class CharStream004 {
    /**字符流原理解析
     * 数据源(UTF-8)======(创建输入流对象)=====内存(长度为：8192的字节数组)->缓冲区
     * 每次读取的时候会判断缓冲区中,是否有数据可以被读取
     * 如果没有,从文件中读取数据,尽可能装满缓冲区
     * 如果有数据,则直接从缓冲区进行读取数据
     * 每次都从缓冲区中读取数据--->提高效率
     * 文件中也没有数据则返回-1
     *
     * 1.创建字符输入流对象
     * 底层：关联文件,并创建缓冲区(长度为8192的字节数组)
     * 2.读取数据
     * 底层：1.判断缓冲区中是否有数据可以读取
     *      2.缓冲区没有数据:从文件中获取数据,装到缓冲区中,每次尽可能装满缓冲区
     *                    如果文件中也没有数据了,返回-1；
     *      3.缓冲区有数据：就从缓冲区中读取
     *      空参的read方法：一次读取一个字节,遇到中文一次读取多个字节,把字节解码并转成十进制返回
     *      有参的read方法：把读取字节,解码,强转三歩合并了,强转之后的字符放到数组中
     *
     *
     * */
    public static void main(String[] args) throws IOException {
        FileReader fr=new FileReader("E:\\aaa\\f.txt");

        int read1 = fr.read();
        System.out.println(read1);

        int read2 = fr.read();
        System.out.println(read2);

        int read3 = fr.read();
        System.out.println(read3);
        System.out.println((char) read3);

        int read4 = fr.read();
        System.out.println(read4);

        int read5 = fr.read();
        System.out.println(read5);

        fr.close();
    }
}
